package Threads.CAS;

import sun.awt.windows.ThemeReader;

import java.util.ArrayList;
import java.util.List;

//定义一个Account接口，需要具体的类实现这个借口，并保证存取时候的线程安全
public interface Account {

    //获取余额
     Integer getBalance();

     //取款
     void withdraw(Integer amount);

     /*
     启动1000个线程，每个线程做-10元的操作
     如果初始余额为10000，那么正确结果应为0
      */
    static void demo(Account account){
        List<Thread> list=new ArrayList<>();
        long start=System.nanoTime();

        for (int i=0;i<1000;i++){
            list.add(new Thread(()->{
                account.withdraw(10);
            }));
        }
        list.forEach(Thread::start);
        list.forEach(t->{
            try {
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        long end=System.nanoTime();

        //输出结果，并且统计运行时间
        System.out.println("result:"+account.getBalance());
        System.out.println("costTime:"+(end-start)/1000_000+"ms");

        }




}
